package com.azt.api.service;

import java.util.List;
import java.util.Map;

import com.azt.api.pojo.GiftExchange;
import com.azt.api.pojo.IntegralRecord;
import com.azt.api.pojo.IntegralRule;
import com.azt.api.pojo.User;
import com.azt.model.page.Pagination;

/**
 * @author Administrator
 *
 */
public interface IntegralService {
	
	public Pagination selectIntegralList(int pageno, int pagesize,Map<String, String> params);
	
	public Pagination selectIntegralRuleList(int pageno, int pagesize,Map<String, String> params);
	
	public IntegralRule queryRuleById(Integer id);

	List<IntegralRule> findChildRule(String ruleCode);

	public IntegralRule getIngralRuleByCode(String ruleCode);
	
	public void addIngralRule(IntegralRule rule);
	
	public void editIngralRule(IntegralRule rule);
	
	public boolean deleteIngralRule(String ruleCode);
	
	public void saveOrUpdate(IntegralRecord ir);
	
	/**
	 * 添加一条积分记录
	 * @Title: addUserRecord 
	 * @Description: TODO
	 * @param userId 用户id 必填
	 * @param ruleCode 规则code 必填
	 * @param amount 金额  如果按积分为null
	 * @param desr 描述 可为null
	 * @param adminId 后台调用需要传入当前管理员id 前台传null
	 * @return: void
	 * @author: zhoudongdong 2017年2月20日 下午2:25:22
	 */
	public void addUserRecord(Integer userId,String ruleCode,Double amount,String desr,Integer operateId);
	
	/** 
	 * @Title: getIntegralRecordByUserId 
	 * @Description: 根据userId查询用户的积分记录
	 * @param userId
	 * @return
	 * @return: List<IntegralRecord>
	 * @author: 查恒 2017年2月23日 上午11:40:04 
	 */
	public List<IntegralRecord> getIntegralRecordByUserId(Integer userId);
	
	/** 
	 * @Title: getIntegralRecordByUserId 
	 * @Description: 查询某个用户某个时间之前的积分，参数是否过期，加分减分。
	 * @param userId
	 * @param operateType 加分减分状态
	 * @param overdue 是否过期参数
	 * @param recordTime 记录时间
	 * @return
	 * @return: List<IntegralRecord>
	 * @author: 查恒 2017年2月23日 上午11:33:50 
	 */
	public List<IntegralRecord> getIntegralRecordByUserId(Integer userId,Integer operateType,Integer overdue,String recordTime);
	
	
	/** 
	 * @Title: setOverdueToIntegralRecord 
	 * @Description: 将某个时间之前的所有获得的，未过期的积分记录设置为过期
	 * @param userId
	 * @param operateType 加分减分状态
	 * @param overdue 是否过期参数
	 * @param recordTime 记录时间 精确天
	 * @return
	 * @return: boolean
	 * @author: 查恒 2017年2月23日 上午11:37:06 
	 */
	public boolean setOverdueToIntegralRecord(Integer userId,Integer operateType,Integer overdue,String recordTime);

	
	/** 
	 * @Title: getOverIntegralRecordByUserId 
	 * @Description: 得到用户记录时间之前的积分和
	 * @param userId
	 * @param operateType
	 * @param lastYear 上一年
	 * @return
	 * @return: Integer
	 * @author: 查恒 2017年2月23日 下午4:56:41 
	 */
	public Integer getOverIntegralRecordByUserId(Integer userId,Integer operateType,Integer lastYear);
	
	
	/** 
	 * @Title: getSinceIntegralRecordByUserId 
	 * @Description: 得到某天的积分
	 * @param userId
	 * @param operateType
	 * @param overdue
	 * @param recordTime
	 * @return
	 * @return: Integer
	 * @author: 查恒 2017年2月24日 下午4:48:50 
	 */
	public Integer getSinceIntegralRecordByUserId(Integer userId,Integer operateType,Integer overdue,String recordTime);
	
	
	
	/** 
	 * @Title: drawIngral 
	 * @Description: 积分抽奖方法
	 * @return
	 * @return: Map<String,Object>
	 * @author: 查恒 2017年2月20日 下午2:22:41 
	 */
	public Map<String , Object> drawIngral(User user);
	

	
	/** 
	 * @Title: selectIntegralRuleList 
	 * @Description:查询积分规则所有记录
	 * @return
	 * @return: List<IntegralRule>
	 * @author: 叶青 2017年2月28日 下午7:18:00 
	 */
	List<IntegralRule> selectIntegralRuleList();

	/**
	 * 返回积分规则模板内容(根据用户的积分自动返回达到的模板或未达到的模板，内置score、times参数)
	 * @param code 规则code
	 * @param userId 用户id
	 * @param extraParam 额外的参数
	 */
	String getRuleContent(String code, int userId, Map extraParam);

	/** 
	 * @Title: getIntegralRecordInstruct 
	 * @Description: 积分规则，取pid为空的值
	 * @return
	 * @return: List<IntegralRecord>
	 * @author: 查恒 2017年3月1日 下午2:23:46 
	 */
	public List<IntegralRecord> getIntegralRecordInstruct();
	
	/** 
	 * @Title: selectSignRecord 
	 * @Description: 判断用户当天是否签到了
	 * @return
	 * @return: Integer
	 * @author: 杨程 2017年3月3日 下午2:23:46 
	 */
	public Integer selectSignRecord(Integer userId,String code);

	/** 
	 * @Title: exchageGift 
	 * @Description: 兑换礼品
	 * @param User 用户
	 * @param ge 礼品兑换
	 * @return
	 * @return: String
	 * @author: 杨程 2017年3月8日 下午2:43:20 
	 */
	public  String exchageGift(User user,GiftExchange ge);
	
}
